package br.com.core;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JOptionPane;

/**
 *
 * @author joaopau1o
 * @author netobeans
 */
public class Servidor {
    
    ArrayList<PrintWriter> escritores = new ArrayList<>();
    
    
    public Servidor() {
        try {
            ServerSocket servidor = new ServerSocket(5000);
            while(true) {
                Socket socket = servidor.accept();
                new Thread(new RecebeCliente(socket)).start();
                PrintWriter escritor = new PrintWriter(socket.getOutputStream());
                escritores.add(escritor);
            }
        
        } catch (IOException ex) {
        	JOptionPane.showMessageDialog(null, "As informações não foram enviadas");
        	//Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    
    public void enviaParaTodos(String texto) {
        for(PrintWriter escritor : escritores) {
            try {
                escritor.println(texto);
                escritor.flush();
            } catch (Exception e) {}
        }
    }
    
    public class RecebeCliente implements Runnable {

        Scanner leitor;
                
        public RecebeCliente (Socket socket) {
            try {
                leitor = new Scanner(socket.getInputStream());
            } catch (IOException ex) {
            	JOptionPane.showMessageDialog(null, "As informações não foram enviadas");
            	//Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }
        
        @Override
        public void run() {
            
            try {
                String texto;
                while((texto = leitor.nextLine()) != null) {
                    System.out.println(texto);
                    enviaParaTodos(texto);
                } 
           
            } catch (Exception e) {}
        }
        
    }
    
    
    public static void main(String[] args) {
        new Servidor();
    }
}
